/*
 * KatrinaConsoleManager.h
 *
 *  Created on: 7 May 2017
 *      Author: yiming
 */

#ifndef KATRINA_HELPER_INCLUDE_KATRINACONSOLEMANAGER_H_
#define KATRINA_HELPER_INCLUDE_KATRINACONSOLEMANAGER_H_

#ifdef EXOTICA_DEBUG_MODE
#define CHECK_EXECUTION         std::cout << "\033[1;32m[Katrina]:\033[0m Ok in " << __FILE__ << " at line " << __LINE__ << " within function " << __PRETTY_FUNCTION__ << ".\n" //!< With endline
#define INDICATE_FAILURE        std::cerr << "\033[1;32m[Katrina]:\033[0m \033[1;31mFailed in " << __FILE__ << " at line " << __LINE__ << " within function " << __PRETTY_FUNCTION__ << ".\033[0m\n"//!< With endline
#define WARNING(x)              std::cout << "\033[1;32m[Katrina]:\033[0m \033[33mWarning in " << __PRETTY_FUNCTION__ << ": " << x << "\033[0m\n"//!< With endline
#define ERROR(x)                std::cerr << "\033[1;32m[Katrina]:\033[0m \033[1;31mFailed in " << __FILE__ << " at line " << __LINE__ << " within function " << __PRETTY_FUNCTION__ << ".\n" << x << "\033[0m\n"//!< With endline
#define INFO(x)                 std::clog << "\033[1;32m[Katrina]:\033[0m Info in " << __PRETTY_FUNCTION__ << ": " << x << "\n"//!< With endline
#else
#define CHECK_EXECUTION         // No operation
#define INDICATE_FAILURE        std::cerr << "\033[1;32m[Katrina]:\033[0m \033[1;31mFailed in " << __FILE__ << " at line " << __LINE__ << " within function " << __PRETTY_FUNCTION__ << ".\033[0m\n"//!< With endline
#define WARNING(x)        std::cout << "\033[1;32m[Katrina]:\033[0m \033[33mWarning in " << __PRETTY_FUNCTION__ << ": " << x << "\033[0m\n"//!< With endline
#define ERROR(x)                std::cerr << "\033[1;32m[Katrina]:\033[0m \033[1;31mFailed in " << __FILE__ << " at line " << __LINE__ << " within function " << __PRETTY_FUNCTION__ << ".\n" << x << "\033[0m\n"//!< With endline
#define INFO(x)
#endif
#define HIGHLIGHT(x)            std::cout << "\033[1;32m[Katrina]:\033[0m \033[36m" << x << "\033[0m\n"
#define HIGHLIGHT_NAMED(name, x)std::cout << "\033[1;32m[Katrina]:\033[0m \033[35m[" << name <<"]\033[0m \033[36m" << x << "\033[0m\n"
#define WARNING_NAMED(name, x)  std::cout << "\033[1;32m[Katrina]:\033[0m \033[35m[" << name <<"]\033[0m \033[33m" << x << "\033[0m\n"
#define INFO_NAMED(name, x)     std::cout << "\033[1;32m[Katrina]:\033[0m \033[35m[" << name <<"]\033[0m " << x << "\n"



#endif /* KATRINA_HELPER_INCLUDE_KATRINACONSOLEMANAGER_H_ */
